package org.leo.myannotation.condition;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Map;

// 自定义条件注解的实现类
public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        // 获取注解 @ConditionalCustom 的全部属性值
        Map<String, Object> map = metadata.getAnnotationAttributes(ConditionalCustom.class.getName());
        // 获取注解的 value 属性值（String[]数组）
        String[] values = (String[]) map.get("value");
        Environment env = context.getEnvironment();
        // 遍历每个属性值
        for (Object value: values) {
            // 如果某个属性值对应的配置属性不存在，则返回false
            if (env.getProperty(value.toString()) == null) {
                return false;
            }
        }
        return true;
    }
}
